package _99练习;


import java.util.*;



public class Exercise {
	public static void main(String[] args) {

		// ---------------------------------------------------------
		// Iterator 缁冧範
		// ---------------------------------------------------------
		// 5. 浣跨敤鏅�歠or寰幆鏄剧ず閬嶅巻棰樼洰4 鐨刲2
		// 浣跨敤鍔犲己for寰幆鏄剧ず閬嶅巻棰樼洰4 鐨刲2
		// 浣跨敤杩唬鍣ㄩ亶鍘嗘樉绀洪鐩�4 鐨刲2,骞剁Щ闄ゅ叾涓殑E

		// ---------------------------------------------------------
		// Queue 缁冧範
		// ---------------------------------------------------------

		// 7 缂栧啓涓�涓尰闄€�侀摱琛屽彨鍙风郴缁�
		// 鍙栧彿()
		// 鍙彿()

		// 闇�瑕佹湁涓�涓槦鍒椾繚瀛樻帓闃熶俊鎭�
		// 闇�瑕佹湁涓彉閲忎繚瀛樺綋鍓嶆渶澶у彿鐮佹槸澶氬皯

		// 缂栧啓娴嬭瘯浠ｇ爜杩涜娴嬭瘯:
		// 缂栧啓涓�涓寰幆锛屽惊鐜殢鏈鸿皟鐢ㄥ彇鍙锋垨鑰呭彨鍙锋柟娉曪紝绛夊緟500ms
		// 鏄剧ず绫讳技濡備笅淇℃伅
		// 椤惧鍙栧彿,褰撳墠鎺掗槦缂栧彿1锛屾偍鍓嶉潰杩樻湁0浣嶉【瀹㈠湪绛夊緟
		// 椤惧鍙栧彿,褰撳墠鎺掗槦缂栧彿2锛屾偍鍓嶉潰杩樻湁1浣嶉【瀹㈠湪绛夊緟
		// 椤惧鍙栧彿,褰撳墠鎺掗槦缂栧彿3锛屾偍鍓嶉潰杩樻湁2浣嶉【瀹㈠湪绛夊緟
		// 绐楀彛鍙彿,璇风紪鍙蜂负1鐨勯【瀹㈠埌绐楀彛.
		// 绐楀彛鍙彿,璇风紪鍙蜂负2鐨勯【瀹㈠埌绐楀彛.
		// 椤惧鍙栧彿,褰撳墠鎺掗槦缂栧彿4锛屾偍鍓嶉潰杩樻湁1浣嶉【瀹㈠湪绛夊緟
		// 椤惧鍙栧彿,褰撳墠鎺掗槦缂栧彿5锛屾偍鍓嶉潰杩樻湁2浣嶉【瀹㈠湪绛夊緟
		// 绐楀彛鍙彿,璇风紪鍙蜂负3鐨勯【瀹㈠埌绐楀彛.
		// 绐楀彛鍙彿,璇风紪鍙蜂负4鐨勯【瀹㈠埌绐楀彛.
		// 绐楀彛鍙彿,璇风紪鍙蜂负5鐨勯【瀹㈠埌绐楀彛.
		// 绐楀彛鍙彿.褰撳墠娌℃湁椤惧鍦ㄧ瓑寰�
		// 绐楀彛鍙彿.褰撳墠娌℃湁椤惧鍦ㄧ瓑寰�
		// 椤惧鍙栧彿,褰撳墠鎺掗槦缂栧彿6锛屾偍鍓嶉潰杩樻湁0浣嶉【瀹㈠湪绛夊緟
		// ...

		// BankSystem b = new BankSystem();
		// b.run();

		// 鏍堢粨鏋勭粌涔�

		// 1. 灏忔槑寰�涓�涓绛掑舰鐘剁殑瀹瑰櫒閲岃浜�20涓湁缂栧彿(1-20鐨�)鐞�,涓�绔紑鍙ｄ竴绔皝闂�
		// 2. 鐒跺悗鍙栧嚭3涓悆,
		// 3. 鐒跺悗闅忔満浠庡凡鍊掑嚭鐨勬墍鏈夌悆涓殢鏈烘嬁涓�涓斁鍥炲幓
		// 4 寰幆鎵ц2,3鐩村埌绔圭瓛涓叏閮ㄥ�掑嚭,鍊掔┖浜嗗氨涓嶅鍥炲幓浜�
		// 鎵撳嵃杩囩▼涓殑鐘跺喌(鍙栧嚭鐨� 绔圭瓛涓墿浣欑殑)

		// [1,2,3,..)

		// pop() *3
		// push()

		// (18,19,16,14,15,17,20)

		// ---------------------------------------------------------
		// Set (HashSet TreeSet)缁冧範
		// ---------------------------------------------------------

		// 8
		// 1) 璁╃敤鎴疯緭鍏ユ暟瀛楋紝鏀惧叆涓�涓猄et瀹瑰櫒銆傛�诲叡闇�瑕佹湁10涓笉鍚岀殑鏁板瓧銆�

		// 9 瀹氫箟涓�涓墤鍏嬬墝绫�
		// 1) 闅忔満寰楀埌10寮犱笉鍚岀殑鐗岋紝鏀惧叆HashSet瀹瑰櫒
		// 2) 闅忔満寰楀埌10寮犱笉鍚岀殑鐗岋紝鏀惧叆TreeSet瀹瑰櫒
		// (鎺掑簭渚濇嵁:鍏堟寜鐓ц姳鑹诧紝绾㈡榛戞鏂圭墖鑽夎姳锛屽湪鎸夌収鏁板瓧澶у皬浠庡皬鍒板ぇ)
		// Set<Poker> s1 = new HashSet<>();
		// while (s1.size() < 10)
		// {
		// Poker p = Poker.getCard();
		// s1.add(p);
		// }
		// System.out.println(s1);
		//
		// Set<Poker> s2 = new TreeSet<>();
		// while (s2.size() < 10)
		// {
		// Poker p = Poker.getCard();
		// s2.add(p);
		// }
		// System.out.println(s2);

		// 10
		// 璁╃敤鎴疯緭鍏�10涓鐢熺殑瀛﹀彿 濮撳悕 璇枃鎴愮哗 鏁板鎴愮哗 鑻辫鎴愮哗 鏀惧叆鐩稿簲鐨勯泦鍚堝鍣�
		// 1) 鎸夌収浠ヤ笅瑙勫垯鎺掑簭鐨勯泦鍚堝鍣�
		// * 鎸夌収璇枃鎴愮哗浠庣鍒伴珮鎺掑簭
		// 2) 鎸夌収浠ヤ笅瑙勫垯鎺掑簭鐨勯泦鍚堝鍣�
		// * 鍏堟寜鐓ф�诲垎浠庨珮鍒板簳鎺掑簭
		// * 濡傛灉鎬诲垎涓�鑷达紝鎸夌収璇枃鎴愮哗浠庨珮鍒板簳鎺掑簭
		// * 濡傛灉璇枃涓�鑷达紝鎸夌収鏁板绋嬪簭浠庨珮鍒板簳鎺掑簭
		// * 濡傛灉鏁板涔熶竴鑷达紝鎸夌収瀛﹀彿浠庝綆鍒伴珮鎺掑簭

		// Comparator 鎺ュ彛
		// 鍒涘缓璁蹭竴涓� 瀹炵幇浜� Comparator 鎺ュ彛 鍖垮悕鍐呴儴绫� 瀵硅薄
		//

		// Map 缁冧範
		// ---------------------------------------------------------

		// 13. (Map缁冧範)
		// 灏嗕互涓嬩俊鎭斁鍏ap瀹瑰櫒
		// 涔︾殑缂栧彿 涔﹀悕 涔︿环
		// ISBN-001 iOS寮�鍙戜粠鍏ラ棬鍒扮獟鎭� 21.5
		// ISBN-002 Python浠庡叆闂ㄥ埌鍑哄 19.5
		// ISBN-003 Eclipse浠庡畨瑁呯殑鍒板嵏杞� 15.6

		// 14. (Map缁冧範)
		String str = "adfasdfer23cvt323446dfs23423sdfadhdsfg";
		// 涓�涓寘鍚嫳鏂囧瓧姣嶅強鏁板瓧鐨勯暱瀛楃涓诧紝鍙互闅忎究鏁插啓瀛楁瘝
		// 缁熻瀛楃涓蹭腑瀛楁瘝鍙婃暟瀛楀嚭鐜扮殑娆℃暟锛屼娇鐢╩ap淇濆瓨
		// 鎵撳嵃骞舵樉绀虹粨鏋�(杈撳嚭鏃舵寜鐓у瓧姣嶉『搴忚緭鍑�)
		// 濡備笅:
		// a 2涓�
		// b 9涓�
		//

		// 寰幆閬嶅巻str涓瘡涓�涓瓧绗�
		// result.put('a',2)

		// 15. 鍒嗗埆鐢↙ist鍙奙ap骞堕亶鍘嗚緭鍑�
		// 瀛樻斁浠ヤ笅淇℃伅
		// 楂樹笁1鐝�
		// 1001 寮犱笁 97 65 77
		// 1002 鏉庡洓 59 60 75
		// 1003 鐜嬩簲 75 83 08
		// 楂樹笁2鐝�
		// 2001 鍒樺 45 75 60
		// 2002 鍏崇窘 79 80 53
		// 2003 瀛欐潈 97 99 100
		// 楂樹笁3鐝�
		// 3001 鍛ㄧ憸 68 97 53
		// 3002 榛勭洊 99 98 80
		// 3003 椴佽們 100 75 65

//		List<Student> l1 = new ArrayList<>();
//		l1.add(new Student("楂樹笁1鐝�", 1001, "寮犱笁", 97, 65, 77));
//		l1.add(new Student("楂樹笁1鐝�", 1002, "鏉庡洓", 97, 65, 77));
//		l1.add(new Student("楂樹笁1鐝�", 1003, "鐜嬩簲", 75, 83, 80));
//		l1.add(new Student("楂樹笁2鐝�", 2001, "鍒樺", 45, 75, 60));
//		l1.add(new Student("楂樹笁2鐝�", 2002, "鍏崇窘", 79, 80, 53));
//		l1.add(new Student("楂樹笁2鐝�", 2003, "瀛欐潈", 97, 99, 100));
//		l1.add(new Student("楂樹笁3鐝�", 3001, "鍛ㄧ憸", 68, 97, 53));
//		l1.add(new Student("楂樹笁3鐝�", 3002, "榛勭洊", 99, 98, 80));
//		l1.add(new Student("楂樹笁3鐝�", 3003, "椴佽們", 100, 75, 65));
//
//		for (int i = 0; i < l1.size(); i++) {
//			System.out.println(l1.get(i));
//		}
//
//		Map<String, Student> m1 = new HashMap<>();
//		m1.put("1", new Student("楂樹笁1鐝�", 1001, "寮犱笁", 97, 65, 77));
//		m1.put("2", new Student("楂樹笁1鐝�", 1002, "鏉庡洓", 97, 65, 77));
//		m1.put("3", new Student("楂樹笁1鐝�", 1003, "鐜嬩簲", 75, 83, 80));
//		m1.put("4", new Student("楂樹笁2鐝�", 2001, "鍒樺", 45, 75, 60));
//		m1.put("5", new Student("楂樹笁2鐝�", 2002, "鍏崇窘", 79, 80, 53));
//		m1.put("6", new Student("楂樹笁2鐝�", 2003, "瀛欐潈", 97, 99, 100));
//		m1.put("7", new Student("楂樹笁3鐝�", 3001, "鍛ㄧ憸", 68, 97, 53));
//		m1.put("8", new Student("楂樹笁3鐝�", 3002, "榛勭洊", 99, 98, 80));
//		m1.put("9", new Student("楂樹笁3鐝�", 3003, "椴佽們", 100, 75, 65));

//		for (Map.Entry<String, Student> entry : m1.entrySet()) {
//			System.out.println(entry.getValue());
//		}
		//// List<String> classList = new ArrayList<>();
		//// classList.add("楂樹笁1鐝�");
		//// classList.add("楂樹笁2鐝�");
		//// classList.add("楂樹笁3鐝�");
		////
		//// List<Student> stus1 = new ArrayList<>();
		//// List<Student> stus2 = new ArrayList<>();
		//// List<Student> stus3 = new ArrayList<>();
		//// List<List<Student>> stus = new ArrayList<>();
		//// stus.add(stus1);
		//// stus.add(stus2);
		//// stus.add(stus2);
		//
		// //
		// Map<Integer,Student> stus1 = new TreeMap<>();
		// Map<Integer,Student> stus2 = new TreeMap<>();
		// Map<Integer,Student> stus3 = new TreeMap<>();
		//
		// Map<String,Map<Integer,Student>> school= new HashMap();
		// school.put("楂樹笁1鐝�",stus1);
		// school.put("楂樹笁2鐝�",stus2);
		// school.put("楂樹笁3鐝�",stus3);
		
		
		
		// 16 浠庨敭鐩樿幏鍙栦竴琛岃緭鍏ュ瓧绗︿覆锛岃姹傚幓闄ら噸澶嶅瓧绗︺��
		Scanner scanner = new Scanner(System.in);
		// String src;
		// System.out.println("璇疯緭鍏ヤ竴涓瓧绗︿覆:");
		// src = scanner.next();
		// Set<Character> s1 = new HashSet<>();
		// for(int i =0;i<src.length();i++)
		// {
		// s1.add(src.charAt(i));
		// }
		// for(Character c:s1)
		// {
		// System.out.print(c);
		// }
		// System.out.println();
		// 17 鎶奓ist闆嗗悎
		// 浣跨敤Colloctions 鏀惧叆 "A","BB","ABC","C" ,"A","B","BC","AAA"
		// 鎶妉ist涓殑 閲嶅鍏冪礌鍘婚櫎
		// List<String> l2 = new LinkedList<String>();
		// Collections.addAll(l2, "A", "BB", "ABC", "C", "A", "B", "ABC",
		// "AAA");
		// Set<String> s2 = new HashSet<String>();
		// for (String s : l2) {
		// s2.add(s);
		// }
		// System.out.println(s2);

		// 18 缂栧啓杩欐牱涓�涓▼搴忥紝璇ョ▼搴忓垱寤轰簡鍦ㄦ煇涓�瀛楃涓蹭腑鍑虹幇鐨勫瓧绗︾储寮曪紙鍗筹紝鍝釜瀛楃鍑虹幇鍦ㄥ瓧绗︿覆涓殑鍝釜鍦版柟锛夈�備粠鍛戒护琛岃鍙栬瀛楃涓层��
		// 渚嬪锛岃繍琛岃绋嬪簭,鏄剧ず濡備笅:
		// 璇疯緭鍏ヤ竴涓插瓧绗�:
		// Hello world
		// 鏌ユ壘缁撴灉:
		// {d=[9],o=[4,6],r=[7],w=[5],H=[0],l=[2,3,8],e=[1]}
		String str1;
		System.out.println("璇疯緭鍏ヤ竴涓瓧绗︿覆:");
		str1 = scanner.next();
		Map<Character, List<Integer>> result = new TreeMap();
		for(int i=0;i<str1.length();i++)
		{
			// 鍙栧嚭瀛楃
			char c = str1.charAt(i);
			
			// 鍒ゆ柇瀹瑰櫒涓湁娌℃湁
			List<Integer> list = result.get(c);
			if(list==null)
			{
				list = new ArrayList<>();
			}
			
			// 鎶婂綋鍓嶄綅缃斁鍏�
			list.add(i);
			
			// 瀛樺叆result
			result.put(c, list);
		}
		System.out.println(result);
		
		// 閬嶅巻杈撳嚭
//		for(Character c:result.keySet())
//		{
//			System.out.println(c+"="+result.get(c));
//		}
//		System.out.println(result);

	}
}